60806040526115b3600955610613600a556005600b5566038d7ea4c68000600c556014600d556064600e556064600f556001601060006101000a81548160ff0219169083151502179055503480156200005757600080fd5b506040518060400160405280601081526020017f426974636f696e2050726573656e7473000000000000000000000000000000008152506040518060400160405280600781526020017f426974636f696e00000000000000000000000000000000000000000000000000815250733cc6cdda760b79bafa08df41ecfa224f810dceb6600160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620002d057801562000196576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b81526004016200015c92919062000906565b600060405180830381600087803b1580156200017757600080fd5b505af11580156200018c573d6000803e3d6000fd5b50505050620002cf565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000250576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200021692919062000906565b600060405180830381600087803b1580156200023157600080fd5b505af115801562000246573d6000803e3d6000fd5b50505050620002ce565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b815260040162000299919062000933565b600060405180830381600087803b158015620002b457600080fd5b505af1158015620002c9573d6000803e3d6000fd5b505050505b5b5b50508160029081620002e3919062000bca565b508060039081620002f5919062000bca565b50620003066200034760201b60201c565b60008190555050506200032e620003226200034c60201b60201c565b6200035460201b60201c565b620003413360646200041a60201b60201c565b62000e44565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200043c8282604051806020016040528060008152506200044060201b60201c565b5050565b620004528383620004f160201b60201c565b60008373ffffffffffffffffffffffffffffffffffffffff163b14620004ec57600080549050600083820390505b6200049b6000868380600101945086620006d860201b60201c565b620004d2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811062000480578160005414620004e957600080fd5b50505b505050565b6000805490506000820362000532576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200054760008483856200083960201b60201c565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550620005d683620005b860008660006200083f60201b60201c565b620005c9856200086f60201b60201c565b176200087f60201b60201c565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b8181146200067957808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001810190506200063c565b5060008203620006b5576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000819055505050620006d36000848385620008aa60201b60201c565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000706620008b060201b60201c565b8786866040518563ffffffff1660e01b81526004016200072a949392919062000d5c565b6020604051808303816000875af19250505080156200076957506040513d601f19601f8201168201806040525081019062000766919062000e12565b60015b620007e6573d80600081146200079c576040519150601f19603f3d011682016040523d82523d6000602084013e620007a1565b606091505b506000815103620007de576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b60008060e883901c905060e86200085e868684620008b860201b60201c565b62ffffff16901b9150509392505050565b60006001821460e11b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b60009392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008ee82620008c1565b9050919050565b6200090081620008e1565b82525050565b60006040820190506200091d6000830185620008f5565b6200092c6020830184620008f5565b9392505050565b60006020820190506200094a6000830184620008f5565b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009d257607f821691505b602082108103620009e857620009e76200098a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a13565b62000a5e868362000a13565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000aab62000aa562000a9f8462000a76565b62000a80565b62000a76565b9050919050565b6000819050919050565b62000ac78362000a8a565b62000adf62000ad68262000ab2565b84845462000a20565b825550505050565b600090565b62000af662000ae7565b62000b0381848462000abc565b505050565b5b8181101562000b2b5762000b1f60008262000aec565b60018101905062000b09565b5050565b601f82111562000b7a5762000b4481620009ee565b62000b4f8462000a03565b8101602085101562000b5f578190505b62000b7762000b6e8562000a03565b83018262000b08565b50505b505050565b600082821c905092915050565b600062000b9f6000198460080262000b7f565b1980831691505092915050565b600062000bba838362000b8c565b9150826002028217905092915050565b62000bd58262000950565b67ffffffffffffffff81111562000bf15762000bf06200095b565b5b62000bfd8254620009b9565b62000c0a82828562000b2f565b600060209050601f83116001811462000c42576000841562000c2d578287015190505b62000c39858262000bac565b86555062000ca9565b601f19841662000c5286620009ee565b60005b8281101562000c7c5784890151825560018201915060208501945060208101905062000c55565b8683101562000c9c578489015162000c98601f89168262000b8c565b8355505b6001600288020188555050505b505050505050565b62000cbc8162000a76565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000cfe57808201518184015260208101905062000ce1565b60008484015250505050565b6000601f19601f8301169050919050565b600062000d288262000cc2565b62000d34818562000ccd565b935062000d4681856020860162000cde565b62000d518162000d0a565b840191505092915050565b600060808201905062000d736000830187620008f5565b62000d826020830186620008f5565b62000d91604083018562000cb1565b818103606083015262000da5818462000d1b565b905095945050505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000dec8162000db5565b811462000df857600080fd5b50565b60008151905062000e0c8162000de1565b92915050565b60006020828403121562000e2b5762000e2a62000db0565b5b600062000e3b8482850162000dfb565b91505092915050565b6144428062000e546000396000f3fe6080604052600436106101f95760003560e01c80637ba5e6211161010d578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb0114610692578063e985e9c5146106bd578063f2fde38b146106fa578063f892c6e214610723578063f968adbe1461074e576101f9565b8063b88d4fde146105f7578063ba7a86b814610613578063c87b56dd1461062a578063d123973014610667576101f9565b8063a035b1fe116100dc578063a035b1fe1461055c578063a0712d6814610587578063a22cb465146105a3578063a7027357146105cc576101f9565b80637ba5e621146104c65780638da5cb5b146104dd57806391b7f5ed1461050857806395d89b4114610531576101f9565b80633ccfd60b116101905780636352211e1161015f5780636352211e146103e15780636c0360eb1461041e5780636d7c4a4b1461044957806370a0823114610472578063715018a6146104af576101f9565b80633ccfd60b1461035a57806342842e0e14610371578063453c23101461038d57806355f804b3146103b8576101f9565b80630c23bb3f116101cc5780630c23bb3f146102bf57806318160ddd146102e857806323b872dd1461031357806336f5b9a31461032f576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612a45565b610779565b6040516102329190612a8d565b60405180910390f35b34801561024757600080fd5b5061025061080b565b60405161025d9190612b38565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190612b90565b61089d565b60405161029a9190612bfe565b60405180910390f35b6102bd60048036038101906102b89190612c45565b61091c565b005b3480156102cb57600080fd5b506102e660048036038101906102e19190612b90565b610935565b005b3480156102f457600080fd5b506102fd610947565b60405161030a9190612c94565b60405180910390f35b61032d60048036038101906103289190612caf565b61095e565b005b34801561033b57600080fd5b506103446109ad565b6040516103519190612c94565b60405180910390f35b34801561036657600080fd5b5061036f6109b3565b005b61038b60048036038101906103869190612caf565b610a6a565b005b34801561039957600080fd5b506103a2610ab9565b6040516103af9190612c94565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190612e37565b610abf565b005b3480156103ed57600080fd5b5061040860048036038101906104039190612b90565b610ada565b6040516104159190612bfe565b60405180910390f35b34801561042a57600080fd5b50610433610aec565b6040516104409190612b38565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190612b90565b610b7a565b005b34801561047e57600080fd5b5061049960048036038101906104949190612e80565b610b8c565b6040516104a69190612c94565b60405180910390f35b3480156104bb57600080fd5b506104c4610c44565b005b3480156104d257600080fd5b506104db610c58565b005b3480156104e957600080fd5b506104f2610c8c565b6040516104ff9190612bfe565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a9190612b90565b610cb6565b005b34801561053d57600080fd5b50610546610cc8565b6040516105539190612b38565b60405180910390f35b34801561056857600080fd5b50610571610d5a565b60405161057e9190612c94565b60405180910390f35b6105a1600480360381019061059c9190612b90565b610d60565b005b3480156105af57600080fd5b506105ca60048036038101906105c59190612ed9565b610f36565b005b3480156105d857600080fd5b506105e1610f4f565b6040516105ee9190612c94565b60405180910390f35b610611600480360381019061060c9190612fba565b610f55565b005b34801561061f57600080fd5b50610628610fa6565b005b34801561063657600080fd5b50610651600480360381019061064c9190612b90565b610fbc565b60405161065e9190612b38565b60405180910390f35b34801561067357600080fd5b5061067c61167f565b6040516106899190612a8d565b60405180910390f35b34801561069e57600080fd5b506106a7611692565b6040516106b49190612c94565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df919061303d565b611698565b6040516106f19190612a8d565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190612e80565b61172c565b005b34801561072f57600080fd5b506107386117af565b6040516107459190612c94565b60405180910390f35b34801561075a57600080fd5b506107636117b5565b6040516107709190612c94565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107d457506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108045750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461081a906130ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610846906130ac565b80156108935780601f1061086857610100808354040283529160200191610893565b820191906000526020600020905b81548152906001019060200180831161087657829003601f168201915b5050505050905090565b60006108a8826117bb565b6108de576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b816109268161181a565b6109308383611917565b505050565b61093d611a5b565b80600a8190555050565b6000610951611ad9565b6001546000540303905090565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461099c5761099b3361181a565b5b6109a7848484611ade565b50505050565b600f5481565b6109bb611a5b565b60003373ffffffffffffffffffffffffffffffffffffffff16476040516109e19061310e565b60006040518083038185875af1925050503d8060008114610a1e576040519150601f19603f3d011682016040523d82523d6000602084013e610a23565b606091505b5050905080610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e9061316f565b60405180910390fd5b50565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610aa857610aa73361181a565b5b610ab3848484611e00565b50505050565b600e5481565b610ac7611a5b565b8060119081610ad6919061333b565b5050565b6000610ae582611e20565b9050919050565b60118054610af9906130ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610b25906130ac565b8015610b725780601f10610b4757610100808354040283529160200191610b72565b820191906000526020600020905b815481529060010190602001808311610b5557829003601f168201915b505050505081565b610b82611a5b565b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bf3576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610c4c611a5b565b610c566000611eec565b565b610c60611a5b565b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610cbe611a5b565b80600c8190555050565b606060038054610cd7906130ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610d03906130ac565b8015610d505780601f10610d2557610100808354040283529160200191610d50565b820191906000526020600020905b815481529060010190602001808311610d3357829003601f168201915b5050505050905090565b600c5481565b601060009054906101000a900460ff16610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690613459565b60405180910390fd5b6001600954610dbe91906134a8565b81610dc7610947565b610dd191906134a8565b10610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890613528565b60405180910390fd5b6000600c5490506000600e549050600a54610e2a610947565b108015610e405750600b54610e3e33611fb2565b105b8015610e4e5750600b548311155b15610e5d5760009150600b5490505b8083610e6833611fb2565b610e7291906134a8565b1115610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa90613594565b60405180910390fd5b60008390506000610ec333611fb2565b03610ed857600184610ed591906135b4565b90505b8281610ee491906135e8565b341015610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d90613676565b60405180910390fd5b610f303385612009565b50505050565b81610f408161181a565b610f4a8383612027565b505050565b600b5481565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f9357610f923361181a565b5b610f9f85858585612132565b5050505050565b610fae611a5b565b610fba33600f54612009565b565b606060006040518061034001604052806040518060400160405280600781526020017f234637393331410000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233436383835660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233330333232650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236336616236660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233736333136340000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233162333837650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233333366137350000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233766373636640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236565656565650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234643453734430000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236664636365350000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236264376562650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030626661300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236664376636660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236463306162340000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236634366139620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236430663430300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233962313966350000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666613330300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236536303034390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233832623662390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236233643466660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030666666660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233062623466660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233335643433350000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233631666637350000000000000000000000000000000000000000000000000081525081525090506000816019856115da91906136c5565b601a81106115eb576115ea6136f6565b5b602002015190506000816040516020016116059190613e2f565b60405160208183030381529060405290506000611621826121a5565b905061165561162f8761231d565b82604051602001611641929190614070565b6040516020818303038152906040526121a5565b604051602001611665919061412d565b604051602081830303815290604052945050505050919050565b601060009054906101000a900460ff1681565b60095481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611734611a5b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a906141c1565b60405180910390fd5b6117ac81611eec565b50565b600a5481565b600d5481565b6000816117c6611ad9565b111580156117d5575060005482105b8015611813575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611914576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b81526004016118919291906141e1565b602060405180830381865afa1580156118ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d2919061421f565b61191357806040517fede71dcc00000000000000000000000000000000000000000000000000000000815260040161190a9190612bfe565b60405180910390fd5b5b50565b600061192282610ada565b90508073ffffffffffffffffffffffffffffffffffffffff166119436123eb565b73ffffffffffffffffffffffffffffffffffffffff16146119a65761196f8161196a6123eb565b611698565b6119a5576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b611a636123f3565b73ffffffffffffffffffffffffffffffffffffffff16611a81610c8c565b73ffffffffffffffffffffffffffffffffffffffff1614611ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace90614298565b60405180910390fd5b565b600090565b6000611ae982611e20565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b50576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611b5c846123fb565b91509150611b728187611b6d6123eb565b612422565b611bbe57611b8786611b826123eb565b611698565b611bbd576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611c24576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c318686866001612466565b8015611c3c57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550611d0a85611ce688888761246c565b7c020000000000000000000000000000000000000000000000000000000017612494565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603611d905760006001850190506000600460008381526020019081526020016000205403611d8e576000548114611d8d578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611df886868660016124bf565b505050505050565b611e1b83838360405180602001604052806000815250610f55565b505050565b60008082905080611e2f611ad9565b11611eb557600054811015611eb45760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603611eb2575b60008103611ea8576004600083600190039350838152602001908152602001600020549050611e7e565b8092505050611ee7565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b6120238282604051806020016040528060008152506124c5565b5050565b80600760006120346123eb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120e16123eb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121269190612a8d565b60405180910390a35050565b61213d84848461095e565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461219f5761216884848484612562565b61219e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606060008251036121c757604051806020016040528060008152509050612318565b60006040518060600160405280604081526020016143cd60409139905060006003600285516121f691906134a8565b61220091906142b8565b600461220c91906135e8565b9050600060208261221d91906134a8565b67ffffffffffffffff81111561223657612235612d0c565b5b6040519080825280601f01601f1916602001820160405280156122685781602001600182028036833780820191505090505b509050818152600183018586518101602084015b818310156122d7576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f811685015182536001820191505061227c565b6003895106600181146122f157600281146123015761230c565b613d3d60f01b600283035261230c565b603d60f81b60018303525b50505050508093505050505b919050565b60606000600161232c846126b2565b01905060008167ffffffffffffffff81111561234b5761234a612d0c565b5b6040519080825280601f01601f19166020018201604052801561237d5781602001600182028036833780820191505090505b509050600082602001820190505b6001156123e0578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816123d4576123d3613696565b5b0494506000850361238b575b819350505050919050565b600033905090565b600033905090565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612483868684612805565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6124cf838361280e565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461255d57600080549050600083820390505b61250f6000868380600101945086612562565b612545576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106124fc57816000541461255a57600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125886123eb565b8786866040518563ffffffff1660e01b81526004016125aa949392919061433e565b6020604051808303816000875af19250505080156125e657506040513d601f19601f820116820180604052508101906125e3919061439f565b60015b61265f573d8060008114612616576040519150601f19603f3d011682016040523d82523d6000602084013e61261b565b606091505b506000815103612657576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612710577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161270657612705613696565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061274d576d04ee2d6d415b85acef8100000000838161274357612742613696565b5b0492506020810190505b662386f26fc10000831061277c57662386f26fc10000838161277257612771613696565b5b0492506010810190505b6305f5e10083106127a5576305f5e100838161279b5761279a613696565b5b0492506008810190505b61271083106127ca5761271083816127c0576127bf613696565b5b0492506004810190505b606483106127ed57606483816127e3576127e2613696565b5b0492506002810190505b600a83106127fc576001810190505b80915050919050565b60009392505050565b6000805490506000820361284e576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61285b6000848385612466565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506128d2836128c3600086600061246c565b6128cc856129c9565b17612494565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461297357808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612938565b50600082036129ae576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506129c460008483856124bf565b505050565b60006001821460e11b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a22816129ed565b8114612a2d57600080fd5b50565b600081359050612a3f81612a19565b92915050565b600060208284031215612a5b57612a5a6129e3565b5b6000612a6984828501612a30565b91505092915050565b60008115159050919050565b612a8781612a72565b82525050565b6000602082019050612aa26000830184612a7e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ae2578082015181840152602081019050612ac7565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b0a82612aa8565b612b148185612ab3565b9350612b24818560208601612ac4565b612b2d81612aee565b840191505092915050565b60006020820190508181036000830152612b528184612aff565b905092915050565b6000819050919050565b612b6d81612b5a565b8114612b7857600080fd5b50565b600081359050612b8a81612b64565b92915050565b600060208284031215612ba657612ba56129e3565b5b6000612bb484828501612b7b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612be882612bbd565b9050919050565b612bf881612bdd565b82525050565b6000602082019050612c136000830184612bef565b92915050565b612c2281612bdd565b8114612c2d57600080fd5b50565b600081359050612c3f81612c19565b92915050565b60008060408385031215612c5c57612c5b6129e3565b5b6000612c6a85828601612c30565b9250506020612c7b85828601612b7b565b9150509250929050565b612c8e81612b5a565b82525050565b6000602082019050612ca96000830184612c85565b92915050565b600080600060608486031215612cc857612cc76129e3565b5b6000612cd686828701612c30565b9350506020612ce786828701612c30565b9250506040612cf886828701612b7b565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d4482612aee565b810181811067ffffffffffffffff82111715612d6357612d62612d0c565b5b80604052505050565b6000612d766129d9565b9050612d828282612d3b565b919050565b600067ffffffffffffffff821115612da257612da1612d0c565b5b612dab82612aee565b9050602081019050919050565b82818337600083830152505050565b6000612dda612dd584612d87565b612d6c565b905082815260208101848484011115612df657612df5612d07565b5b612e01848285612db8565b509392505050565b600082601f830112612e1e57612e1d612d02565b5b8135612e2e848260208601612dc7565b91505092915050565b600060208284031215612e4d57612e4c6129e3565b5b600082013567ffffffffffffffff811115612e6b57612e6a6129e8565b5b612e7784828501612e09565b91505092915050565b600060208284031215612e9657612e956129e3565b5b6000612ea484828501612c30565b91505092915050565b612eb681612a72565b8114612ec157600080fd5b50565b600081359050612ed381612ead565b92915050565b60008060408385031215612ef057612eef6129e3565b5b6000612efe85828601612c30565b9250506020612f0f85828601612ec4565b9150509250929050565b600067ffffffffffffffff821115612f3457612f33612d0c565b5b612f3d82612aee565b9050602081019050919050565b6000612f5d612f5884612f19565b612d6c565b905082815260208101848484011115612f7957612f78612d07565b5b612f84848285612db8565b509392505050565b600082601f830112612fa157612fa0612d02565b5b8135612fb1848260208601612f4a565b91505092915050565b60008060008060808587031215612fd457612fd36129e3565b5b6000612fe287828801612c30565b9450506020612ff387828801612c30565b935050604061300487828801612b7b565b925050606085013567ffffffffffffffff811115613025576130246129e8565b5b61303187828801612f8c565b91505092959194509250565b60008060408385031215613054576130536129e3565b5b600061306285828601612c30565b925050602061307385828601612c30565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130c457607f821691505b6020821081036130d7576130d661307d565b5b50919050565b600081905092915050565b50565b60006130f86000836130dd565b9150613103826130e8565b600082019050919050565b6000613119826130eb565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613159601083612ab3565b915061316482613123565b602082019050919050565b600060208201905081810360008301526131888161314c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026131f17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826131b4565b6131fb86836131b4565b95508019841693508086168417925050509392505050565b6000819050919050565b600061323861323361322e84612b5a565b613213565b612b5a565b9050919050565b6000819050919050565b6132528361321d565b61326661325e8261323f565b8484546131c1565b825550505050565b600090565b61327b61326e565b613286818484613249565b505050565b5b818110156132aa5761329f600082613273565b60018101905061328c565b5050565b601f8211156132ef576132c08161318f565b6132c9846131a4565b810160208510156132d8578190505b6132ec6132e4856131a4565b83018261328b565b50505b505050565b600082821c905092915050565b6000613312600019846008026132f4565b1980831691505092915050565b600061332b8383613301565b9150826002028217905092915050565b61334482612aa8565b67ffffffffffffffff81111561335d5761335c612d0c565b5b61336782546130ac565b6133728282856132ae565b600060209050601f8311600181146133a55760008415613393578287015190505b61339d858261331f565b865550613405565b601f1984166133b38661318f565b60005b828110156133db578489015182556001820191506020850194506020810190506133b6565b868310156133f857848901516133f4601f891682613301565b8355505b6001600288020188555050505b505050505050565b7f4d696e74696e67206973206e6f74206c697665207965742e0000000000000000600082015250565b6000613443601883612ab3565b915061344e8261340d565b602082019050919050565b6000602082019050818103600083015261347281613436565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134b382612b5a565b91506134be83612b5a565b92508282019050808211156134d6576134d5613479565b5b92915050565b7f4e6f206d6f726500000000000000000000000000000000000000000000000000600082015250565b6000613512600783612ab3565b915061351d826134dc565b602082019050919050565b6000602082019050818103600083015261354181613505565b9050919050565b7f4d6178207065722077616c6c6574000000000000000000000000000000000000600082015250565b600061357e600e83612ab3565b915061358982613548565b602082019050919050565b600060208201905081810360008301526135ad81613571565b9050919050565b60006135bf82612b5a565b91506135ca83612b5a565b92508282039050818111156135e2576135e1613479565b5b92915050565b60006135f382612b5a565b91506135fe83612b5a565b925082820261360c81612b5a565b9150828204841483151761362357613622613479565b5b5092915050565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b6000613660601d83612ab3565b915061366b8261362a565b602082019050919050565b6000602082019050818103600083015261368f81613653565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006136d082612b5a565b91506136db83612b5a565b9250826136eb576136ea613696565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060008201527f30302f737667222077696474683d223130303022206865696768743d2231303060208201527f30222076657273696f6e3d22312e31222076696577426f783d2230203020343060408201527f39312e323720343039312e3733223e3c726563742077696474683d223130302560608201527f22206865696768743d2231303025222066696c6c3d2200000000000000000000608082015250565b60006137fe609683613725565b915061380982613730565b609682019050919050565b600061381f82612aa8565b6138298185613725565b9350613839818560208601612ac4565b80840191505092915050565b7f222f3e3c706174682066696c6c3d227768697465222066696c6c2d72756c653d60008201527f226e6f6e7a65726f2220643d224d323934372e373720313735342e333863343060208201527f2e37322c2d3237322e3236202d3136362e35362c2d3431382e3631202d34353060408201527f2c2d3531362e32346c39312e3935202d3336382e38202d3232342e35202d353560608201527f2e3934202d38392e3531203335392e3039632d35392e30322c2d31342e37322060808201527f2d3131392e36332c2d32382e3539202d3137392e38372c2d34322e33346c393060a08201527f2e3136202d3336312e3436202d3232342e3336202d35352e3934202d3932203360c08201527f36382e3638632d34382e38342c2d31312e3132202d39362e38312c2d32322e3160e08201527f31202d3134332e33352c2d33332e36396c302e3236202d312e3136202d3330396101008201527f2e3539202d37372e3331202d35392e3732203233392e373863302c30203136366101208201527f2e35362c33382e3138203136332e30352c34302e35332039302e39312c32322e6101408201527f3639203130372e33352c38322e3837203130342e36322c3133302e35376c2d316101608201527f30342e3734203432302e313563362e32362c312e35392031342e33382c332e386101808201527f392032332e33342c372e3439202d372e34392c2d312e3836202d31352e34362c6101a08201527f2d332e3839202d32332e37332c2d352e38376c2d3134362e3831203538382e356101c08201527f37632d31312e31312c32372e3632202d33392e33312c36392e3037202d3130326101e08201527f2e38372c35332e333320322e32352c332e3236202d3136332e31372c2d34302e6102008201527f3732202d3136332e31372c2d34302e37326c2d3131312e3436203235362e39386102208201527f203239322e31352037322e38336335342e33352c31332e3633203130372e36316102408201527f2c32372e3839203136302e30362c34312e336c2d39322e39203337332e3033206102608201527f3232342e32342035352e3934203932202d3336392e30376336312e32362c31366102808201527f2e3633203132302e37312c33312e3937203137382e39312c34362e34336c2d396102a08201527f312e3639203336372e3333203232342e35312035352e39342039322e3839202d6102c08201527f3337322e3333633338322e38322c37322e3435203637302e36372c34332e32346102e08201527f203739312e38332c2d3330332e30322039372e36332c2d3237382e3738202d346103008201527f2e38362c2d3433392e3538202d3230362e32362c2d3534342e3434203134362e6103208201527f36392c2d33332e3833203235372e31382c2d3133302e3331203238362e36342c6103408201527f2d3332392e36316c2d302e3037202d302e30357a6d2d3531322e3933203731396103608201527f2e3236632d36392e33382c3237382e3738202d3533382e37362c3132382e30386103808201527f202d3639302e39342c39302e32396c3132332e3238202d3439342e32633135326103a08201527f2e31372c33372e3939203634302e31372c3131332e3137203536372e36372c346103c08201527f30332e39317a6d36392e3433202d3732332e33632d36332e32392c3235332e356103e08201527f38202d3435332e39362c3132342e3735202d3538302e36392c39332e31366c316104008201527f31312e3737202d3434382e3231633132362e37332c33312e3539203533342e386104208201527f352c39302e3535203436382e39342c3335352e30356c2d302e303220307a22206104408201527f7374796c653d22262331303b7472616e73666f726d3a20726f746174652833346104608201527f37646567293b262331303b202020207472616e73666f726d2d6f726967696e3a6104808201527f2063656e7465723b262331303b222f3e3c2f7376673e000000000000000000006104a082015250565b6000613e186104b683613725565b9150613e2382613845565b6104b682019050919050565b6000613e3a826137f1565b9150613e468284613814565b9150613e5182613e0a565b915081905092915050565b7f7b00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613e92600183613725565b9150613e9d82613e5c565b600182019050919050565b7f226e616d65223a22426974636f696e2023000000000000000000000000000000600082015250565b6000613ede601183613725565b9150613ee982613ea8565b601182019050919050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b6000613f2a600283613725565b9150613f3582613ef4565b600282019050919050565b7f22696d616765223a202200000000000000000000000000000000000000000000600082015250565b6000613f76600a83613725565b9150613f8182613f40565b600a82019050919050565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000600082015250565b6000613fc2601a83613725565b9150613fcd82613f8c565b601a82019050919050565b7f2261747472696275746573223a205b7b2274726169745f74797065223a20224260008201527f6974636f696e222c202276616c7565223a2022546f20546865204d6f6f6e212160208201527f2200000000000000000000000000000000000000000000000000000000000000604082015250565b600061405a604183613725565b915061406582613fd8565b604182019050919050565b600061407b82613e85565b915061408682613ed1565b91506140928285613814565b915061409d82613f1d565b91506140a882613f69565b91506140b382613fb5565b91506140bf8284613814565b91506140ca82613f1d565b91506140d58261404d565b91508190509392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000614117601d83613725565b9150614122826140e1565b601d82019050919050565b60006141388261410a565b91506141448284613814565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141ab602683612ab3565b91506141b68261414f565b604082019050919050565b600060208201905081810360008301526141da8161419e565b9050919050565b60006040820190506141f66000830185612bef565b6142036020830184612bef565b9392505050565b60008151905061421981612ead565b92915050565b600060208284031215614235576142346129e3565b5b60006142438482850161420a565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614282602083612ab3565b915061428d8261424c565b602082019050919050565b600060208201905081810360008301526142b181614275565b9050919050565b60006142c382612b5a565b91506142ce83612b5a565b9250826142de576142dd613696565b5b828204905092915050565b600081519050919050565b600082825260208201905092915050565b6000614310826142e9565b61431a81856142f4565b935061432a818560208601612ac4565b61433381612aee565b840191505092915050565b60006080820190506143536000830187612bef565b6143606020830186612bef565b61436d6040830185612c85565b818103606083015261437f8184614305565b905095945050505050565b60008151905061439981612a19565b92915050565b6000602082840312156143b5576143b46129e3565b5b60006143c38482850161438a565b9150509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122003cdac90347225d078f36850bc486b98170579616327f01ec219e4fc651e326264736f6c63430008120033