608060405234801561000f575f5ffd5b5060405161511c38038061511c833981810160405281019061003191906108cc565b858581600390816100429190610b94565b5080600490816100529190610b94565b5050505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036100c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ba90610cbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012890610d4b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361019f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019690610dd9565b60405180910390fd5b5f84116101e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d890610e67565b60405180910390fd5b6101f35f5f1b846102eb60201b60201c565b506102247fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775846102eb60201b60201c565b508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836006819055506102e0306102be6103e160201b60201c565b600a6102ca9190610fed565b866102d59190611037565b6103e960201b60201c565b505050505050611130565b5f6102fc838361046e60201b60201c565b6103d757600160055f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506103746104d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506103db565b5f90505b92915050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610459575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016104509190611087565b60405180910390fd5b61046a5f83836104d960201b60201c565b5050565b5f60055f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610529578060025f82825461051d91906110a0565b925050819055506105f7565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156105b2578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016105a9939291906110e2565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361063e578060025f8282540392505081905550610688565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106e59190611117565b60405180910390a3505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6107518261070b565b810181811067ffffffffffffffff821117156107705761076f61071b565b5b80604052505050565b5f6107826106f2565b905061078e8282610748565b919050565b5f67ffffffffffffffff8211156107ad576107ac61071b565b5b6107b68261070b565b9050602081019050919050565b8281835e5f83830152505050565b5f6107e36107de84610793565b610779565b9050828152602081018484840111156107ff576107fe610707565b5b61080a8482856107c3565b509392505050565b5f82601f83011261082657610825610703565b5b81516108368482602086016107d1565b91505092915050565b5f819050919050565b6108518161083f565b811461085b575f5ffd5b50565b5f8151905061086c81610848565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61089b82610872565b9050919050565b6108ab81610891565b81146108b5575f5ffd5b50565b5f815190506108c6816108a2565b92915050565b5f5f5f5f5f5f60c087890312156108e6576108e56106fb565b5b5f87015167ffffffffffffffff811115610903576109026106ff565b5b61090f89828a01610812565b965050602087015167ffffffffffffffff8111156109305761092f6106ff565b5b61093c89828a01610812565b955050604061094d89828a0161085e565b945050606061095e89828a016108b8565b935050608061096f89828a016108b8565b92505060a061098089828a016108b8565b9150509295509295509295565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806109db57607f821691505b6020821081036109ee576109ed610997565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610a507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610a15565b610a5a8683610a15565b95508019841693508086168417925050509392505050565b5f819050919050565b5f610a95610a90610a8b8461083f565b610a72565b61083f565b9050919050565b5f819050919050565b610aae83610a7b565b610ac2610aba82610a9c565b848454610a21565b825550505050565b5f5f905090565b610ad9610aca565b610ae4818484610aa5565b505050565b5b81811015610b0757610afc5f82610ad1565b600181019050610aea565b5050565b601f821115610b4c57610b1d816109f4565b610b2684610a06565b81016020851015610b35578190505b610b49610b4185610a06565b830182610ae9565b50505b505050565b5f82821c905092915050565b5f610b6c5f1984600802610b51565b1980831691505092915050565b5f610b848383610b5d565b9150826002028217905092915050565b610b9d8261098d565b67ffffffffffffffff811115610bb657610bb561071b565b5b610bc082546109c4565b610bcb828285610b0b565b5f60209050601f831160018114610bfc575f8415610bea578287015190505b610bf48582610b79565b865550610c5b565b601f198416610c0a866109f4565b5f5b82811015610c3157848901518255600182019150602085019450602081019050610c0c565b86831015610c4e5784890151610c4a601f891682610b5d565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f41646d696e20616464726573732063616e6e6f74206265207a65726f000000005f82015250565b5f610ca7601c83610c63565b9150610cb282610c73565b602082019050919050565b5f6020820190508181035f830152610cd481610c9b565b9050919050565b7f4d61696e2070726f6669742077616c6c65742063616e6e6f74206265207a65725f8201527f6f00000000000000000000000000000000000000000000000000000000000000602082015250565b5f610d35602183610c63565b9150610d4082610cdb565b604082019050919050565b5f6020820190508181035f830152610d6281610d29565b9050919050565b7f5365636f6e646172792070726f6669742077616c6c65742063616e6e6f7420625f8201527f65207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f610dc3602683610c63565b9150610dce82610d69565b604082019050919050565b5f6020820190508181035f830152610df081610db7565b9050919050565b7f546f74616c20746f6b656e73206d7573742062652067726561746572207468615f8201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f610e51602683610c63565b9150610e5c82610df7565b604082019050919050565b5f6020820190508181035f830152610e7e81610e45565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b6001851115610f0757808604811115610ee357610ee2610e85565b5b6001851615610ef25780820291505b8081029050610f0085610eb2565b9450610ec7565b94509492505050565b5f82610f1f5760019050610fda565b81610f2c575f9050610fda565b8160018114610f425760028114610f4c57610f7b565b6001915050610fda565b60ff841115610f5e57610f5d610e85565b5b8360020a915084821115610f7557610f74610e85565b5b50610fda565b5060208310610133831016604e8410600b8410161715610fb05782820a905083811115610fab57610faa610e85565b5b610fda565b610fbd8484846001610ebe565b92509050818404811115610fd457610fd3610e85565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610ff78261083f565b915061100283610fe1565b925061102f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610f10565b905092915050565b5f6110418261083f565b915061104c8361083f565b925082820261105a8161083f565b9150828204841483151761107157611070610e85565b5b5092915050565b61108181610891565b82525050565b5f60208201905061109a5f830184611078565b92915050565b5f6110aa8261083f565b91506110b58361083f565b92508282019050808211156110cd576110cc610e85565b5b92915050565b6110dc8161083f565b82525050565b5f6060820190506110f55f830186611078565b61110260208301856110d3565b61110f60408301846110d3565b949350505050565b5f60208201905061112a5f8301846110d3565b92915050565b613fdf8061113d5f395ff3fe6080604052600436106101cc575f3560e01c806370a08231116100f6578063a217fddf11610094578063c625e9b111610063578063c625e9b1146106c6578063d105880f146106e2578063d547741f1461070a578063dd62ed3e14610732576101cc565b8063a217fddf146105fa578063a9059cbb14610624578063ae10426514610660578063c56acbcd1461069c576101cc565b806391d14854116100d057806391d148541461054257806395d89b411461057e57806399a5d747146105a85780639ab1b484146105e4576101cc565b806370a08231146104b257806375b238fc146104ee5780637e1c0c0914610518576101cc565b80632a11ced01161016e57806348238bcd1161013d57806348238bcd146103fa57806354e4067a14610424578063586360ce14610460578063670f71511461048a576101cc565b80632a11ced01461033c5780632f2ff15d14610380578063313ce567146103a857806336568abe146103d2576101cc565b80630982542b116101aa5780630982542b1461027257806318160ddd1461029a57806323b872dd146102c4578063248a9ca314610300576101cc565b806301ffc9a7146101d057806306fdde031461020c578063095ea7b314610236575b5f5ffd5b3480156101db575f5ffd5b506101f660048036038101906101f19190612a3e565b61076e565b6040516102039190612a83565b60405180910390f35b348015610217575f5ffd5b506102206107e7565b60405161022d9190612b0c565b60405180910390f35b348015610241575f5ffd5b5061025c60048036038101906102579190612bb9565b610877565b6040516102699190612a83565b60405180910390f35b34801561027d575f5ffd5b5061029860048036038101906102939190612bf7565b610899565b005b3480156102a5575f5ffd5b506102ae610a62565b6040516102bb9190612c44565b60405180910390f35b3480156102cf575f5ffd5b506102ea60048036038101906102e59190612c5d565b610a6b565b6040516102f79190612a83565b60405180910390f35b34801561030b575f5ffd5b5061032660048036038101906103219190612ce0565b610a99565b6040516103339190612d1a565b60405180910390f35b348015610347575f5ffd5b50610362600480360381019061035d9190612d33565b610ab6565b60405161037799989796959493929190612d6d565b60405180910390f35b34801561038b575f5ffd5b506103a660048036038101906103a19190612df8565b610b47565b005b3480156103b3575f5ffd5b506103bc610b69565b6040516103c99190612e51565b60405180910390f35b3480156103dd575f5ffd5b506103f860048036038101906103f39190612df8565b610b71565b005b348015610405575f5ffd5b5061040e610bec565b60405161041b9190612e6a565b60405180910390f35b34801561042f575f5ffd5b5061044a60048036038101906104459190612e83565b610c11565b6040516104579190612b0c565b60405180910390f35b34801561046b575f5ffd5b50610474611005565b6040516104819190612c44565b60405180910390f35b348015610495575f5ffd5b506104b060048036038101906104ab9190612eae565b61100b565b005b3480156104bd575f5ffd5b506104d860048036038101906104d39190612e83565b61120c565b6040516104e59190612c44565b60405180910390f35b3480156104f9575f5ffd5b50610502611251565b60405161050f9190612d1a565b60405180910390f35b348015610523575f5ffd5b5061052c611275565b6040516105399190612c44565b60405180910390f35b34801561054d575f5ffd5b5061056860048036038101906105639190612df8565b61127b565b6040516105759190612a83565b60405180910390f35b348015610589575f5ffd5b506105926112df565b60405161059f9190612b0c565b60405180910390f35b3480156105b3575f5ffd5b506105ce60048036038101906105c99190612d33565b61136f565b6040516105db9190612c44565b60405180910390f35b3480156105ef575f5ffd5b506105f86113b4565b005b348015610605575f5ffd5b5061060e6117e6565b60405161061b9190612d1a565b60405180910390f35b34801561062f575f5ffd5b5061064a60048036038101906106459190612bb9565b6117ec565b6040516106579190612a83565b60405180910390f35b34801561066b575f5ffd5b5061068660048036038101906106819190612d33565b61180e565b6040516106939190612c44565b60405180910390f35b3480156106a7575f5ffd5b506106b061182d565b6040516106bd9190612e6a565b60405180910390f35b6106e060048036038101906106db9190612eae565b611852565b005b3480156106ed575f5ffd5b5061070860048036038101906107039190612eec565b611b23565b005b348015610715575f5ffd5b50610730600480360381019061072b9190612df8565b611f2d565b005b34801561073d575f5ffd5b5061075860048036038101906107539190612bf7565b611f4f565b6040516107659190612c44565b60405180910390f35b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107e057506107df82611fd1565b5b9050919050565b6060600380546107f690612f90565b80601f016020809104026020016040519081016040528092919081815260200182805461082290612f90565b801561086d5780601f106108445761010080835404028352916020019161086d565b820191905f5260205f20905b81548152906001019060200180831161085057829003601f168201915b5050505050905090565b5f5f61088161203a565b905061088e818585612041565b600191505092915050565b6108c37fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753361127b565b610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f99061300a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096790613098565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590613126565b60405180910390fd5b8160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f600254905090565b5f5f610a7561203a565b9050610a82858285612053565b610a8d8585856120e5565b60019150509392505050565b5f60055f8381526020019081526020015f20600101549050919050565b600a8181548110610ac5575f80fd5b905f5260205f2090600802015f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003015490806004015490806005015490806006015490806007015f9054906101000a900460ff16908060070160019054906101000a900460ff16905089565b610b5082610a99565b610b59816121d5565b610b6383836121e9565b50505050565b5f6012905090565b610b7961203a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bdd576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610be782826122d3565b505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60605f5f90505b600a80549050811015610fc4578273ffffffffffffffffffffffffffffffffffffffff16600a8281548110610c5057610c4f613144565b5b905f5260205f2090600802015f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610fb7575f600a8281548110610cae57610cad613144565b5b905f5260205f209060080201604051806101200160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015f9054906101000a900460ff161515151581526020016007820160019054906101000a900460ff16151515158152505090505f610d96610b69565b600a610da291906132cd565b8260200151610db19190613344565b90505f8260c001518211610dc5575f610dd6565b8260c0015182610dd59190613374565b5b90505f5f90505f610de5610b69565b600a610df191906132cd565b8560c00151610e009190613344565b90505f4290505f60405180602001604052805f81525090508660e00151610f6e575f876101000151610e62578760400151905087604001518310610e5d576064886060015188610e5091906133a7565b610e5a9190613344565b94505b610edd565b87608001518860a00151610e7691906133e8565b90508760a001518310610edc575f88608001518960a0015185610e999190613374565b610ea39190613344565b90506064818a606001518a610eb891906133a7565b610ec291906133a7565b610ecc9190613344565b955086861115610eda578695505b505b5b5f6064896060015189610ef091906133a7565b610efa9190613344565b9050610f1e848311610f0c575f610f19565b8483610f189190613374565b5b6123bd565b610f2782612453565b610f3088612453565b610f398a612453565b610f4289612453565b604051602001610f569594939291906135c7565b60405160208183030381529060405292505050610fa7565b6040518060400160405280602081526020017f416c6c20746f6b656e732068617665206265656e20646973747269627574656481525090505b8098505050505050505050611000565b8080600101915050610c18565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff790613692565b60405180910390fd5b919050565b60075481565b5f821161104d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611044906136fa565b60405180910390fd5b816110573361120c565b1015611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f90613762565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd906137ca565b60405180910390fd5b5f6111108361136f565b90505f818461111f9190613374565b905061112c3384836120e5565b6111703360085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064605f8661116191906133a7565b61116b9190613344565b6120e5565b6111b43360095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660646005866111a591906133a7565b6111af9190613344565b6120e5565b3373ffffffffffffffffffffffffffffffffffffffff167f7debc712939ce2028bbca7ca90cc85e8fb59a7772e041423d3ec1588af4730ed8584866040516111fe939291906137e8565b60405180910390a250505050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b60065481565b5f60055f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6060600480546112ee90612f90565b80601f016020809104026020016040519081016040528092919081815260200182805461131a90612f90565b80156113655780601f1061133c57610100808354040283529160200191611365565b820191905f5260205f20905b81548152906001019060200180831161134857829003601f168201915b5050505050905090565b5f5f6103e860058461138191906133a7565b61138b9190613344565b90506803cb71f51fc55800008111156113ab576803cb71f51fc558000090505b80915050919050565b6113de7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753361127b565b61141d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114149061300a565b60405180910390fd5b5f600a8054905011611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b9061388d565b60405180910390fd5b5f5f90505b600a805490508110156117e3575f600a828154811061148b5761148a613144565b5b905f5260205f2090600802019050806007015f9054906101000a900460ff16156114b557506117d6565b806002015442106117d4578060070160019054906101000a900460ff16611612575f6064826003015483600101546114ed91906133a7565b6114f79190613344565b90508060075f82825461150a91906133e8565b9250508190555061155c30835f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611540610b69565b600a61154c91906132cd565b8461155791906133a7565b6120e5565b80826006015f82825461156f91906133e8565b9250508190555060018260070160016101000a81548160ff02191690831515021790555081600201548260050181905550815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f16b0da2ffcb90c6723317bd637d9aad7f04711f42bbe0ac0918ebe10f1f9001c826040516116089190612c44565b60405180910390a2505b5f81600401548260050154426116289190613374565b6116329190613344565b90505f8111156117d2575f8160648460030154856001015461165491906133a7565b61165e9190613344565b61166891906133a7565b90505f8360060154846001015461167f9190613374565b90508082111561168d578091505b8160075f82825461169e91906133e8565b925050819055506116f030855f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166116d4610b69565b600a6116e091906132cd565b856116eb91906133a7565b6120e5565b81846006015f82825461170391906133e8565b9250508190555083600401548361171a91906133a7565b846005015f82825461172c91906133e8565b92505081905550835f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f16b0da2ffcb90c6723317bd637d9aad7f04711f42bbe0ac0918ebe10f1f9001c8360405161179b9190612c44565b60405180910390a283600101548460060154036117cf576001846007015f6101000a81548160ff0219169083151502179055505b50505b505b505b8080600101915050611469565b50565b5f5f1b81565b5f5f6117f661203a565b90506118038185856120e5565b600191505092915050565b5f5f655af3107a40009050808361182591906133a7565b915050919050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8211611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b906136fa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f9906138f5565b60405180910390fd5b8161190c8261120c565b101561194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490613983565b60405180910390fd5b5f611956610b69565b600a61196291906132cd565b8361196d91906133a7565b90505f6119798261180e565b9050803410156119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b5906139eb565b60405180910390fd5b5f6119c88361136f565b90505f81846119d79190613374565b90506119e48533836120e5565b611a288560085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064605f86611a1991906133a7565b611a239190613344565b6120e5565b611a6c8560095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064600586611a5d91906133a7565b611a679190613344565b6120e5565b5f8334611a799190613374565b90505f811115611ac8573373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611ac6573d5f5f3e3d5ffd5b505b8573ffffffffffffffffffffffffffffffffffffffff167fd150a324c4fc8346977d1499aa36cac8c85e6af24bf1486022fad77d05f8b19f868533604051611b12939291906137e8565b60405180910390a250505050505050565b611b4d7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753361127b565b611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b839061300a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190613a79565b60405180910390fd5b5f8411611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3390613b07565b60405180910390fd5b5f8311611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7590613b95565b60405180910390fd5b5f82118015611c8e575060648211155b611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490613c23565b60405180910390fd5b5f8111611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0690613cb1565b60405180910390fd5b5f600754600654611d209190613374565b905080851115611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c90613d19565b60405180910390fd5b5f603c85611d7391906133a7565b42611d7e91906133e8565b9050600a6040518061012001604052808973ffffffffffffffffffffffffffffffffffffffff168152602001888152602001838152602001868152602001603c86611dc991906133a7565b81526020018381526020015f81526020015f151581526020015f1515815250908060018154018082558091505060019003905f5260205f2090600802015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015f6101000a81548160ff0219169083151502179055506101008201518160070160016101000a81548160ff02191690831515021790555050508673ffffffffffffffffffffffffffffffffffffffff167f126a582c721c971de796ababb456c78165961480d73a7f08f84c92644a800d2b87838787604051611f1c9493929190613d37565b60405180910390a250505050505050565b611f3682610a99565b611f3f816121d5565b611f4983836122d3565b50505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b61204e83838360016125ac565b505050565b5f61205e8484611f4f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146120df57818110156120d0578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016120c793929190613d7a565b60405180910390fd5b6120de84848484035f6125ac565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612155575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161214c9190612e6a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121c5575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016121bc9190612e6a565b60405180910390fd5b6121d083838361277b565b505050565b6121e6816121e161203a565b612994565b50565b5f6121f4838361127b565b6122c957600160055f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061226661203a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506122cd565b5f90505b92915050565b5f6122de838361127b565b156123b3575f60055f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061235061203a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600190506123b7565b5f90505b92915050565b60605f62015180836123cf9190613344565b90505f610e1062015180856123e49190613daf565b6123ee9190613344565b90505f603c610e10866124019190613daf565b61240b9190613344565b905061241683612453565b61241f83612453565b61242883612453565b60405160200161243a93929190613ebd565b6040516020818303038152906040529350505050919050565b60605f8203612499576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125a7565b5f8290505f5b5f82146124c85780806124b190613f0e565b915050600a826124c19190613344565b915061249f565b5f8167ffffffffffffffff8111156124e3576124e2613f55565b5b6040519080825280601f01601f1916602001820160405280156125155781602001600182028036833780820191505090505b5090505b5f85146125a05760018261252d9190613374565b9150600a8561253c9190613daf565b603061254891906133e8565b60f81b81838151811061255e5761255d613144565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a856125999190613344565b9450612519565b8093505050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361261c575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016126139190612e6a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361268c575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016126839190612e6a565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015612775578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161276c9190612c44565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127cb578060025f8282546127bf91906133e8565b92505081905550612899565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612854578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161284b93929190613d7a565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128e0578060025f828254039250508190555061292a565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129879190612c44565b60405180910390a3505050565b61299e828261127b565b6129e15780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016129d8929190613f82565b60405180910390fd5b5050565b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a1d816129e9565b8114612a27575f5ffd5b50565b5f81359050612a3881612a14565b92915050565b5f60208284031215612a5357612a526129e5565b5b5f612a6084828501612a2a565b91505092915050565b5f8115159050919050565b612a7d81612a69565b82525050565b5f602082019050612a965f830184612a74565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612ade82612a9c565b612ae88185612aa6565b9350612af8818560208601612ab6565b612b0181612ac4565b840191505092915050565b5f6020820190508181035f830152612b248184612ad4565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b5582612b2c565b9050919050565b612b6581612b4b565b8114612b6f575f5ffd5b50565b5f81359050612b8081612b5c565b92915050565b5f819050919050565b612b9881612b86565b8114612ba2575f5ffd5b50565b5f81359050612bb381612b8f565b92915050565b5f5f60408385031215612bcf57612bce6129e5565b5b5f612bdc85828601612b72565b9250506020612bed85828601612ba5565b9150509250929050565b5f5f60408385031215612c0d57612c0c6129e5565b5b5f612c1a85828601612b72565b9250506020612c2b85828601612b72565b9150509250929050565b612c3e81612b86565b82525050565b5f602082019050612c575f830184612c35565b92915050565b5f5f5f60608486031215612c7457612c736129e5565b5b5f612c8186828701612b72565b9350506020612c9286828701612b72565b9250506040612ca386828701612ba5565b9150509250925092565b5f819050919050565b612cbf81612cad565b8114612cc9575f5ffd5b50565b5f81359050612cda81612cb6565b92915050565b5f60208284031215612cf557612cf46129e5565b5b5f612d0284828501612ccc565b91505092915050565b612d1481612cad565b82525050565b5f602082019050612d2d5f830184612d0b565b92915050565b5f60208284031215612d4857612d476129e5565b5b5f612d5584828501612ba5565b91505092915050565b612d6781612b4b565b82525050565b5f61012082019050612d815f83018c612d5e565b612d8e602083018b612c35565b612d9b604083018a612c35565b612da86060830189612c35565b612db56080830188612c35565b612dc260a0830187612c35565b612dcf60c0830186612c35565b612ddc60e0830185612a74565b612dea610100830184612a74565b9a9950505050505050505050565b5f5f60408385031215612e0e57612e0d6129e5565b5b5f612e1b85828601612ccc565b9250506020612e2c85828601612b72565b9150509250929050565b5f60ff82169050919050565b612e4b81612e36565b82525050565b5f602082019050612e645f830184612e42565b92915050565b5f602082019050612e7d5f830184612d5e565b92915050565b5f60208284031215612e9857612e976129e5565b5b5f612ea584828501612b72565b91505092915050565b5f5f60408385031215612ec457612ec36129e5565b5b5f612ed185828601612ba5565b9250506020612ee285828601612b72565b9150509250929050565b5f5f5f5f5f60a08688031215612f0557612f046129e5565b5b5f612f1288828901612b72565b9550506020612f2388828901612ba5565b9450506040612f3488828901612ba5565b9350506060612f4588828901612ba5565b9250506080612f5688828901612ba5565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612fa757607f821691505b602082108103612fba57612fb9612f63565b5b50919050565b7f43616c6c6572206973206e6f7420616e2061646d696e000000000000000000005f82015250565b5f612ff4601683612aa6565b9150612fff82612fc0565b602082019050919050565b5f6020820190508181035f83015261302181612fe8565b9050919050565b7f4d61696e2077616c6c65742063616e6e6f74206265207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613082602283612aa6565b915061308d82613028565b604082019050919050565b5f6020820190508181035f8301526130af81613076565b9050919050565b7f5365636f6e646172792077616c6c65742063616e6e6f74206265207a65726f205f8201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b5f613110602783612aa6565b915061311b826130b6565b604082019050919050565b5f6020820190508181035f83015261313d81613104565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b60018511156131f3578086048111156131cf576131ce613171565b5b60018516156131de5780820291505b80810290506131ec8561319e565b94506131b3565b94509492505050565b5f8261320b57600190506132c6565b81613218575f90506132c6565b816001811461322e576002811461323857613267565b60019150506132c6565b60ff84111561324a57613249613171565b5b8360020a91508482111561326157613260613171565b5b506132c6565b5060208310610133831016604e8410600b841016171561329c5782820a90508381111561329757613296613171565b5b6132c6565b6132a984848460016131aa565b925090508184048111156132c0576132bf613171565b5b81810290505b9392505050565b5f6132d782612b86565b91506132e283612e36565b925061330f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846131fc565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61334e82612b86565b915061335983612b86565b92508261336957613368613317565b5b828204905092915050565b5f61337e82612b86565b915061338983612b86565b92508282039050818111156133a1576133a0613171565b5b92915050565b5f6133b182612b86565b91506133bc83612b86565b92508282026133ca81612b86565b915082820484148315176133e1576133e0613171565b5b5092915050565b5f6133f282612b86565b91506133fd83612b86565b925082820190508082111561341557613414613171565b5b92915050565b5f81905092915050565b7f54696d6520746f206e6578742072656c656173653a20000000000000000000005f82015250565b5f61345960168361341b565b915061346482613425565b601682019050919050565b5f61347982612a9c565b613483818561341b565b9350613493818560208601612ab6565b80840191505092915050565b7f2c204e6578742072656c6561736520616d6f756e743a200000000000000000005f82015250565b5f6134d360178361341b565b91506134de8261349f565b601782019050919050565b7f2c20576974686472617761626c6520616d6f756e743a200000000000000000005f82015250565b5f61351d60178361341b565b9150613528826134e9565b601782019050919050565b7f2c20546f74616c2072656d61696e696e673a20000000000000000000000000005f82015250565b5f61356760138361341b565b915061357282613533565b601382019050919050565b7f2c20546f74616c2072656c65617365643a2000000000000000000000000000005f82015250565b5f6135b160128361341b565b91506135bc8261357d565b601282019050919050565b5f6135d18261344d565b91506135dd828861346f565b91506135e8826134c7565b91506135f4828761346f565b91506135ff82613511565b915061360b828661346f565b91506136168261355b565b9150613622828561346f565b915061362d826135a5565b9150613639828461346f565b91508190509695505050505050565b7f557365722077616c6c6574206e6f7420666f756e6400000000000000000000005f82015250565b5f61367c601583612aa6565b915061368782613648565b602082019050919050565b5f6020820190508181035f8301526136a981613670565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f6136e4602083612aa6565b91506136ef826136b0565b602082019050919050565b5f6020820190508181035f830152613711816136d8565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e63650000000000005f82015250565b5f61374c601a83612aa6565b915061375782613718565b602082019050919050565b5f6020820190508181035f83015261377981613740565b9050919050565b7f427579657220616464726573732063616e6e6f74206265207a65726f000000005f82015250565b5f6137b4601c83612aa6565b91506137bf82613780565b602082019050919050565b5f6020820190508181035f8301526137e1816137a8565b9050919050565b5f6060820190506137fb5f830186612c35565b6138086020830185612c35565b6138156040830184612d5e565b949350505050565b7f4e6f20686f6c6465727320746f206469737472696275746520746f6b656e73205f8201527f746f000000000000000000000000000000000000000000000000000000000000602082015250565b5f613877602283612aa6565b91506138828261381d565b604082019050919050565b5f6020820190508181035f8301526138a48161386b565b9050919050565b7f53656c6c657220616464726573732063616e6e6f74206265207a65726f0000005f82015250565b5f6138df601d83612aa6565b91506138ea826138ab565b602082019050919050565b5f6020820190508181035f83015261390c816138d3565b9050919050565b7f53656c6c65722068617320696e73756666696369656e7420746f6b656e2062615f8201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b5f61396d602583612aa6565b915061397882613913565b604082019050919050565b5f6020820190508181035f83015261399a81613961565b9050919050565b7f496e73756666696369656e74207061796d656e740000000000000000000000005f82015250565b5f6139d5601483612aa6565b91506139e0826139a1565b602082019050919050565b5f6020820190508181035f830152613a02816139c9565b9050919050565b7f557365722077616c6c65742063616e6e6f74206265207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613a63602283612aa6565b9150613a6e82613a09565b604082019050919050565b5f6020820190508181035f830152613a9081613a57565b9050919050565b7f546f6b656e20616d6f756e74206d7573742062652067726561746572207468615f8201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f613af1602683612aa6565b9150613afc82613a97565b604082019050919050565b5f6020820190508181035f830152613b1e81613ae5565b9050919050565b7f54696d6520746f2072656c65617365206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613b7f602983612aa6565b9150613b8a82613b25565b604082019050919050565b5f6020820190508181035f830152613bac81613b73565b9050919050565b7f52656c656173652072617465206d757374206265206265747765656e203120615f8201527f6e64203130300000000000000000000000000000000000000000000000000000602082015250565b5f613c0d602683612aa6565b9150613c1882613bb3565b604082019050919050565b5f6020820190508181035f830152613c3a81613c01565b9050919050565b7f496e74657276616c206d7573742062652067726561746572207468616e207a655f8201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c9b602283612aa6565b9150613ca682613c41565b604082019050919050565b5f6020820190508181035f830152613cc881613c8f565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320617661696c61626c6500000000005f82015250565b5f613d03601b83612aa6565b9150613d0e82613ccf565b602082019050919050565b5f6020820190508181035f830152613d3081613cf7565b9050919050565b5f608082019050613d4a5f830187612c35565b613d576020830186612c35565b613d646040830185612c35565b613d716060830184612c35565b95945050505050565b5f606082019050613d8d5f830186612d5e565b613d9a6020830185612c35565b613da76040830184612c35565b949350505050565b5f613db982612b86565b9150613dc483612b86565b925082613dd457613dd3613317565b5b828206905092915050565b7f20646179732c20000000000000000000000000000000000000000000000000005f82015250565b5f613e1360078361341b565b9150613e1e82613ddf565b600782019050919050565b7f20686f7572732c200000000000000000000000000000000000000000000000005f82015250565b5f613e5d60088361341b565b9150613e6882613e29565b600882019050919050565b7f206d696e757465730000000000000000000000000000000000000000000000005f82015250565b5f613ea760088361341b565b9150613eb282613e73565b600882019050919050565b5f613ec8828661346f565b9150613ed382613e07565b9150613edf828561346f565b9150613eea82613e51565b9150613ef6828461346f565b9150613f0182613e9b565b9150819050949350505050565b5f613f1882612b86565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f4a57613f49613171565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f604082019050613f955f830185612d5e565b613fa26020830184612d0b565b939250505056fea2646970667358221220d29d7f7a1b08c03820e4811062004822dad52df855aa4acc7f5d87d5ca4ffb3164736f6c634300081c003300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000005d21dba00000000000000000000000000a3ef585ea5082889b3ddb086d0438039bbbc2d30000000000000000000000000a3ef585ea5082889b3ddb086d0438039bbbc2d300000000000000000000000003d86adc61c8745c5c76395536edf7550cdd78722000000000000000000000000000000000000000000000000000000000000000645546f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000645544f4b454e0000000000000000000000000000000000000000000000000000